package br.com.petsis.funcionalidades.manterTipoVale;

import java.util.ArrayList;
import java.util.List;

import javax.persistence.EntityManager;

import org.jboss.seam.ScopeType;
import org.jboss.seam.annotations.In;
import org.jboss.seam.annotations.Name;
import org.jboss.seam.annotations.Scope;
import org.jboss.seam.annotations.security.Restrict;
import org.jboss.seam.faces.FacesMessages;
import org.jboss.seam.international.StatusMessage.Severity;

import br.com.petsis.entity.Perfil;
import br.com.petsis.entity.TipoVale;

@Name("manterTipoValeController")
@Scope(ScopeType.CONVERSATION)
@Restrict(value="#{!identity.hasRole('"+Perfil.PERFIL_VETERINARIA+"')}")
public class ManterTipoValeController {
	
	private static final String QRY_TIPOS_VALE = "select t from TipoVale t where t.flgAtivo = 'T'";
	
	@In(create=true)
	private EntityManager entityManager;
	
	private List<TipoVale> listaTiposVale;
	
	private TipoVale tipoValeEdicao;
	
	private boolean selecionadoTodos;
	
	private boolean funcionarioObrigatorio;
	
	public void onLoad(){
		
	}
	
	public void onLoadList(){
		tipoValeEdicao = new TipoVale();
		setFuncionarioObrigatorio(false);
	}
	
	public void excluir(){
		List<TipoVale> listaRemocao = new ArrayList<TipoVale>();
		for(TipoVale v : getListaTiposVale()){
			if(v.isSelecionado()){
				v.setFlgAtivo('F');
				entityManager.merge(v);
				listaRemocao.add(v);
			}
		}
		entityManager.flush();
		getListaTiposVale().removeAll(listaRemocao);
	}
	
	public String salvar(){
		getTipoValeEdicao().setFlgAtivo('T');
		getTipoValeEdicao().setFlgFuncionarioObrigatorio(isFuncionarioObrigatorio() ? 'T' : 'F');
		TipoVale tipoValeSalvo = entityManager.merge(getTipoValeEdicao());
		if(!getListaTiposVale().contains(tipoValeSalvo)){
			getListaTiposVale().add(tipoValeSalvo);
		}
		tipoValeEdicao = new TipoVale();
		setFuncionarioObrigatorio(false);
		entityManager.flush();
		FacesMessages.instance().add(Severity.INFO,"Tipo de Vale salvo com sucesso.");
		return "persisted";
	}
	
	public String editar(TipoVale tipoVale){
		tipoValeEdicao = tipoVale;
		setFuncionarioObrigatorio(tipoVale.getFlgFuncionarioObrigatorio() != null && tipoVale.getFlgFuncionarioObrigatorio().equals('T')? true : false);
		return "editar";
	}

	public boolean isSelecionadoTodos() {
		return selecionadoTodos;
	}

	public void setSelecionadoTodos(boolean selecionadoTodos) {
		this.selecionadoTodos = selecionadoTodos;
	}
	
	public void selecionaTodos(){
		for(TipoVale f : getListaTiposVale()){
			if(isSelecionadoTodos()){
				f.setSelecionado(true);
			}else{
				f.setSelecionado(false);
			}
		}
	}

	public TipoVale getTipoValeEdicao() {
		if (tipoValeEdicao == null) {
			tipoValeEdicao = new TipoVale();
		}
		return tipoValeEdicao;
	}

	public void setTipoValeEdicao(TipoVale tipoValeEdicao) {
		this.tipoValeEdicao = tipoValeEdicao;
	}

	public String novoTipoVale(){
		return "novo"; 
	}
	
	public String cancelar(){
		tipoValeEdicao = new TipoVale();
		return "voltar";  
	}

	public List<TipoVale> getListaTiposVale() {
		if (listaTiposVale == null) {
			listaTiposVale = entityManager.createQuery(QRY_TIPOS_VALE).getResultList();
		}
		return listaTiposVale;
	}

	public void setListaTiposVale(List<TipoVale> listaTiposVale) {
		this.listaTiposVale = listaTiposVale;
	}

	public boolean isFuncionarioObrigatorio() {
		return funcionarioObrigatorio;
	}

	public void setFuncionarioObrigatorio(boolean funcionarioObrigatorio) {
		this.funcionarioObrigatorio = funcionarioObrigatorio;
	}

}
